﻿
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<!-- saved from url=(0014)about:internet -->
<html xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:mssdk="winsdk" xmlns:script="urn:script" xmlns:build="urn:build" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<meta name="Description" content="Typed Data"/>
<meta name="MSHAttr" content="PreferredSiteName:MSDN"/>
<meta name="MSHAttr" content="PreferredLib:/library/windows/hardware"/>
<title>Typed Data</title>

<meta name="MS-HAID" content="EngExtCpp_DG_82e81486-6ba4-479b-9855-b5700447aad1.xml"/>


<link rel="STYLESHEET" type="text/css" HREF="../common/backsdk4.css"/>





<style>
html,div { margin: 0; padding: 0;}

body {
	padding: 0px;
	margin: 0px;
	overflow: auto;
	height: 100%;
}

#winchm_template_button{
	float: right;
	width: 93px;
	top: 7px;
	position: relative;
	text-align: right;
	right: 5px;
	height: auto;
}

#winchm_template_top{
	padding: 0px;
	margin: 0px;
	border-bottom: 1px solid #9B9B9B;
	background-color: #B1CEFE;
}

#winchm_template_navigation{
	margin: 0px;
	padding-top: 7px;
	padding-left: 7px;
	padding-bottom: 3px;
	padding-right: 0px;
	font-size: 8.5pt;
	font-family: Arial, Helvetica, sans-serif;
	font-weight: normal;
	color: #585858;
}

#winchm_template_title{
	margin: 0px;
	padding-top: 4px;
	padding-left: 7px;
	padding-bottom: 7px;
	padding-right: 0px;
	font-size: 18px; 
	font-family: Verdana, Geneva, sans-serif;
	color: #363636;
}

#winchm_template_content{
	margin-top: 20px;
	margin-left: 15px;
	margin-bottom: 20px;
	margin-right: 15px;
	width: auto  !important;
	width: 100%;
}

#winchm_template_footer{
	border-width: 1px;
	border-color: #B1CEFE;
	border-top-style: solid;
	margin-top: 15px;
	margin-left: 15px;
	margin-bottom: 20px;
	margin-right: 15px;
	padding-top: 7px;
	padding-left: 0px;
	padding-bottom: 0px;
	padding-right: 0px;
	font-family: arial, helvetica, sans-serif;
	font-size: 8.5pt;
	color: #696969;
	width: auto;
	text-align: left;
}


#winchm_template_container{
	margin: 0px;
	padding: 0px;
	position: static;
	padding-bottom: 3px;
	overflow: auto;
	background-color: #FFFFFF;
}


@media print
{
#winchm_template_container{
	position: static;	
	margin: 0px;
	padding: 5px;
	
	width: auto;
	height: auto;
	overflow: auto;
}
#winchm_template_button{
visibility:hidden;
}
}

#winchm_template_navigation A:link	{text-decoration: none; color:#004080}
#winchm_template_navigation A:visited  {text-decoration: none; color: #004080}
#winchm_template_navigation A:active {text-decoration: none; color: #004080 }
#winchm_template_navigation A:hover {text-decoration: none;color: #0080FF}

A:link	{text-decoration: underline; color:#0033CC}
A:visited  {text-decoration: underline; color: #0033CC}
A:active {text-decoration: underline; color: #0033CC }
A:hover {text-decoration: underline;color: #FF0000;}
</style>
<script type="text/javascript">
function isMobile(){
Agent = window.navigator.userAgent;
if (Agent.indexOf("iPhone")>=1 || Agent.indexOf("iPad")>=1 || Agent.indexOf("iPod")>=1 || Agent.indexOf("Android")>=1){
return true;
}else{
return false;	
}

}
function d_onresize(){
if (window.navigator.userAgent.indexOf("MSIE")>=1){
document.getElementById('winchm_template_container').style.pixelWidth = document.body.offsetWidth - 3;
document.getElementById('winchm_template_container').style.pixelHeight = document.body.offsetHeight - document.getElementById('winchm_template_top').offsetHeight - 4;
}
document.getElementById('winchm_template_container').style.top = document.getElementById('winchm_template_top').offsetHeight + 'px';
}

function d_onbeforeprint(){
document.getElementById('winchm_template_container').style.width = 'auto';
document.getElementById('winchm_template_container').style.height = 'auto';
}

function d_onafterprint(){
d_onresize();
}

if(!isMobile()){

window.onload = d_onresize;
window.onresize = d_onresize;
window.onbeforeprint = d_onbeforeprint;
window.onafterprint = d_onafterprint;

document.write("<style>\n");
document.write("body {overflow: hidden;}\n");
document.write("#winchm_template_container {position: absolute;overflow: auto;top : 0px;right: 0px;bottom: 0px;left: 0px;}\n");
document.write("</style>\n");
}

</script>
</head>
<body><script language="JavaScript" type="text/JavaScript">
function syn(){
if(parent.nav.tree){
 if(parent.nav.tree.loaded){
  parent.nav.tree.selectNode(934);
 }else{
  setTimeout("syn()",500);
}
  }else{
  setTimeout("syn()",500);
  }}
if(parent!=self){
  setTimeout("syn()",100);
}else{
  parent.location.href = "../../index.htm?page=debugger/typed_data.htm";
}
originalOnload = window.onload;
if(originalOnload==null){
window.onload = function(){parent.contentLoaded = true;};
}else{
window.onload = function(){originalOnload();parent.contentLoaded = true;};
}
</script> 


<div id="winchm_template_top">
	<div id="winchm_template_button"><A href="parsing_extension_arguments.htm" title="Previous topic"><img id="winchm_template_prev" alt="Previous topic" src="../template2/btn_prev_n.gif" border="0"></a><A href="engextcpp_extension_reference.htm" title="Next topic"><img id="winchm_template_next" alt="Next topic" src="../template2/btn_next_n.gif" border="0"></a></div>
	<div id="winchm_template_navigation">Help &gt; 
<A href="introduction6.htm">Debugging Tools for Windows (WinDbg, KD, CDB, NTSD)</A> &gt; <A href="debugging_resources.htm">Debugging Resources</A> &gt; <A href="debugger_engine_and_extension_apis.htm">Debugger Engine and Extension APIs</A> &gt; <A href="engextcpp_extensions.htm">EngExtCpp Extensions</A> &gt; <A href="engextcpp_extension_design_guide.htm">EngExtCpp Extension Design Guide</A> &gt; </div>
	<div id="winchm_template_title">Typed Data</div>
</div>
<div id="winchm_template_container">
	<div id="winchm_template_content"><div id="mainSection"><p>The EngExtCpp extension framework provides a few classes to help manipulate the target's memory.  The <a href="#Bookmark964"><b>ExtRemoteData</b></a> class describes a small piece of the target's memory.  If the type of this memory is known, it is referred to as <i>typed data</i> and is described by <a href="#Bookmark992"><b>ExtRemoteTyped</b></a> objects.</p>
<p>Windows lists can be iterated over by using <a href="#Bookmark1028"><b>ExtRemoteList</b></a> and, if the type of the objects in the list is known, <a href="#Bookmark1037"><b>ExtRemoteTypedList</b></a>.</p>
<div class="alert"><b>Note</b>    Like the client objects in <a href="#Bookmark940"><b>ExtExtension</b></a>, instances of these classes are only valid while the extension library is used to execute an extension command or format a structure for output.  In particular, they should not be cached.  For more information about when client objects are valid, see <a href="#Bookmark930">Client Objects and the Engine</a>, .</div>
<div> </div>
<h3><a id="remote_data"></a><a id="REMOTE_DATA"></a>Remote Data</h3>
<p>Remote data should be handled using the class <a href="#Bookmark964"><b>ExtRemoteData</b></a>.  This class is a wrapper around a small section of a target's memory.  <b>ExtRemoteData</b> automatically retrieves the memory and wraps other common requests with throwing methods.</p>
<h3><a id="remote_typed_data"></a><a id="REMOTE_TYPED_DATA"></a>Remote Typed Data</h3>
<p>If the type of the remote data is known, it should be handled using the <a href="#Bookmark992"><b>ExtRemoteTyped</b></a> class.  This class is an enhanced remote data object that understands data typed with type information from symbols.  It is initialized to a particular object by symbol or cast, after which it can be used like an object of the given type.  </p>
<h3><a id="remote_lists"></a><a id="REMOTE_LISTS"></a>Remote Lists</h3>
<p>To handle remote lists, use the <a href="#Bookmark1028"><b>ExtRemoteList</b></a> class.  This class can be used for either a singly linked or doubly linked list.  If the list is doubly linked, it is assumed that the previous pointer immediately follows the next pointer. The class contains methods that can iterate over the list and retrieve nodes both forward and backward. <b>ExtRemoteList</b> can be used with either null-terminated or circular lists also.</p>
<h3><a id="remote_typed_lists"></a><a id="REMOTE_TYPED_LISTS"></a>Remote Typed Lists</h3>
<p>To handle remote lists when the type of the nodes in the list is known, use the <a href="#Bookmark1037"><b>ExtRemoteTypedList</b></a> class.  This is an enhanced version of <a href="#Bookmark1028"><b>ExtRemoteList</b></a>.  In addition to the basic functionality of <b>ExtRemoteList</b>, <b>ExtRemoteTypedList</b> automatically determines link offsets from type information.</p></div></div>	
	<div id="winchm_template_footer">Copyright &copy; 2019. All rights 
reserved. (To change the copyright info, just edit it in template.)</div>
</div>

</body>
</html>
